package com.yc.cloud.admin.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yc.cloud.admin.dto.request.HwDeviceGroupSaveReqDto;
import com.yc.cloud.admin.vo.HwDeviceGroupStrategyVo;
import com.yc.cloud.admin.vo.HwDeviceGroupVo;
import com.yc.cloud.common.basic.dto.BasePageReqDTO;
import com.yc.cloud.common.orm.CommonPage;
import com.yc.cloud.entity.HwDeviceGroup;

import java.util.List;

/**
 * <p>
 *  硬件设备分组表 服务类
 * </p>
 *
 * @author kinggu
 * @since 2025-07-15
 */
public interface HwDeviceGroupService extends IService<HwDeviceGroup> {

    /**
     * 更新设备组内的设备列表 (全量替换)
     *
     * @param groupId 设备组ID
     * @param deviceIds 设备ID列表
     * @return 是否操作成功
     */
    boolean updateGroupDevices(Long groupId, List<Long> deviceIds);

    /**
     * 创建设备分组
     * @param saveReqDto
     * @return
     */
    boolean create(HwDeviceGroupSaveReqDto saveReqDto);

    /**
     * 更新设备分组
     * @param id
     * @param saveReqDto
     * @return
     */
    boolean update(Long id, HwDeviceGroupSaveReqDto saveReqDto);

    CommonPage<HwDeviceGroupVo> list(BasePageReqDTO pageReqDTO);

    HwDeviceGroupVo getVOById(Long id);

    List<HwDeviceGroupVo> convertToVoList(List<HwDeviceGroup> entityList);

    HwDeviceGroup get(Long id);

    boolean delete(Long id);
    
    /**
     * 更新设备组绑定的策略列表 (全量替换)
     *
     * @param groupId 设备组ID
     * @param strategyIds 策略ID列表
     * @return 是否操作成功
     */
    boolean updateGroupStrategies(Long groupId, List<Long> strategyIds);
    
    /**
     * 获取系统所有策略，并标识出当前设备组已绑定的
     *
     * @param groupId 设备组ID
     * @return 带有绑定状态的策略VO列表
     */
    List<HwDeviceGroupStrategyVo> getGroupStrategies(Long groupId);

    /**
     * 刷新设备分组数据，包括统计信息
     * @return 是否成功
     */
    boolean refreshData();
} 